home *** CD-ROM | disk | FTP | other *** search
- .386p
- extrn MAX_SCR:DWORD
- extrn ReWrt_flg:WORD
- extrn dmy_vram:DWORD
- extrn locate:NEAR
- ;*****************************************************************
- ;
- ;void wrtank(ch,x,y,ccol,bcol,off)
- ;
- ;void wrtkanji(ch,x,y,ccol,bcol,off)
- ;
- ;*****************************************************************
- v_para struc
- v_ebp dd ?
- v_pcr dd ?
- v_ch dd ?
- v_x dd ?
- v_y dd ?
- v_ccol dd ?
- v_bcol dd ?
- v_off dd ?
- v_para ends
- ;*************************************
- ; VRAM Direct Access Program
- ;*************************************
- bitptn segment 'DATA'
- colptn:
- dd 000000000h,099999999h,0AAAAAAAAh,0BBBBBBBBh
- dd 0CCCCCCCCh,0DDDDDDDDh,0EEEEEEEEh,0FFFFFFFFh
- dd 088888888h,011111111h,022222222h,033333333h
- dd 044444444h,055555555h,066666666h,077777777h
- fntptn:
- dd 000000000h,0F0000000h,00F000000h,0FF000000h
- dd 000F00000h,0F0F00000h,00FF00000h,0FFF00000h
- dd 0000F0000h,0F00F0000h,00F0F0000h,0FF0F0000h
- dd 000FF0000h,0F0FF0000h,00FFF0000h,0FFFF0000h
- dd 00000F000h,0F000F000h,00F00F000h,0FF00F000h
- dd 000F0F000h,0F0F0F000h,00FF0F000h,0FFF0F000h
- dd 0000FF000h,0F00FF000h,00F0FF000h,0FF0FF000h
- dd 000FFF000h,0F0FFF000h,00FFFF000h,0FFFFF000h
- dd 000000F00h,0F0000F00h,00F000F00h,0FF000F00h
- dd 000F00F00h,0F0F00F00h,00FF00F00h,0FFF00F00h
- dd 0000F0F00h,0F00F0F00h,00F0F0F00h,0FF0F0F00h
- dd 000FF0F00h,0F0FF0F00h,00FFF0F00h,0FFFF0F00h
- dd 00000FF00h,0F000FF00h,00F00FF00h,0FF00FF00h
- dd 000F0FF00h,0F0F0FF00h,00FF0FF00h,0FFF0FF00h
- dd 0000FFF00h,0F00FFF00h,00F0FFF00h,0FF0FFF00h
- dd 000FFFF00h,0F0FFFF00h,00FFFFF00h,0FFFFFF00h
- dd 0000000F0h,0F00000F0h,00F0000F0h,0FF0000F0h
- dd 000F000F0h,0F0F000F0h,00FF000F0h,0FFF000F0h
- dd 0000F00F0h,0F00F00F0h,00F0F00F0h,0FF0F00F0h
- dd 000FF00F0h,0F0FF00F0h,00FFF00F0h,0FFFF00F0h
- dd 00000F0F0h,0F000F0F0h,00F00F0F0h,0FF00F0F0h
- dd 000F0F0F0h,0F0F0F0F0h,00FF0F0F0h,0FFF0F0F0h
- dd 0000FF0F0h,0F00FF0F0h,00F0FF0F0h,0FF0FF0F0h
- dd 000FFF0F0h,0F0FFF0F0h,00FFFF0F0h,0FFFFF0F0h
- dd 000000FF0h,0F0000FF0h,00F000FF0h,0FF000FF0h
- dd 000F00FF0h,0F0F00FF0h,00FF00FF0h,0FFF00FF0h
- dd 0000F0FF0h,0F00F0FF0h,00F0F0FF0h,0FF0F0FF0h
- dd 000FF0FF0h,0F0FF0FF0h,00FFF0FF0h,0FFFF0FF0h
- dd 00000FFF0h,0F000FFF0h,00F00FFF0h,0FF00FFF0h
- dd 000F0FFF0h,0F0F0FFF0h,00FF0FFF0h,0FFF0FFF0h
- dd 0000FFFF0h,0F00FFFF0h,00F0FFFF0h,0FF0FFFF0h
- dd 000FFFFF0h,0F0FFFFF0h,00FFFFFF0h,0FFFFFFF0h
- dd 00000000Fh,0F000000Fh,00F00000Fh,0FF00000Fh
- dd 000F0000Fh,0F0F0000Fh,00FF0000Fh,0FFF0000Fh
- dd 0000F000Fh,0F00F000Fh,00F0F000Fh,0FF0F000Fh
- dd 000FF000Fh,0F0FF000Fh,00FFF000Fh,0FFFF000Fh
- dd 00000F00Fh,0F000F00Fh,00F00F00Fh,0FF00F00Fh
- dd 000F0F00Fh,0F0F0F00Fh,00FF0F00Fh,0FFF0F00Fh
- dd 0000FF00Fh,0F00FF00Fh,00F0FF00Fh,0FF0FF00Fh
- dd 000FFF00Fh,0F0FFF00Fh,00FFFF00Fh,0FFFFF00Fh
- dd 000000F0Fh,0F0000F0Fh,00F000F0Fh,0FF000F0Fh
- dd 000F00F0Fh,0F0F00F0Fh,00FF00F0Fh,0FFF00F0Fh
- dd 0000F0F0Fh,0F00F0F0Fh,00F0F0F0Fh,0FF0F0F0Fh
- dd 000FF0F0Fh,0F0FF0F0Fh,00FFF0F0Fh,0FFFF0F0Fh
- dd 00000FF0Fh,0F000FF0Fh,00F00FF0Fh,0FF00FF0Fh
- dd 000F0FF0Fh,0F0F0FF0Fh,00FF0FF0Fh,0FFF0FF0Fh
- dd 0000FFF0Fh,0F00FFF0Fh,00F0FFF0Fh,0FF0FFF0Fh
- dd 000FFFF0Fh,0F0FFFF0Fh,00FFFFF0Fh,0FFFFFF0Fh
- dd 0000000FFh,0F00000FFh,00F0000FFh,0FF0000FFh
- dd 000F000FFh,0F0F000FFh,00FF000FFh,0FFF000FFh
- dd 0000F00FFh,0F00F00FFh,00F0F00FFh,0FF0F00FFh
- dd 000FF00FFh,0F0FF00FFh,00FFF00FFh,0FFFF00FFh
- dd 00000F0FFh,0F000F0FFh,00F00F0FFh,0FF00F0FFh
- dd 000F0F0FFh,0F0F0F0FFh,00FF0F0FFh,0FFF0F0FFh
- dd 0000FF0FFh,0F00FF0FFh,00F0FF0FFh,0FF0FF0FFh
- dd 000FFF0FFh,0F0FFF0FFh,00FFFF0FFh,0FFFFF0FFh
- dd 000000FFFh,0F0000FFFh,00F000FFFh,0FF000FFFh
- dd 000F00FFFh,0F0F00FFFh,00FF00FFFh,0FFF00FFFh
- dd 0000F0FFFh,0F00F0FFFh,00F0F0FFFh,0FF0F0FFFh
- dd 000FF0FFFh,0F0FF0FFFh,00FFF0FFFh,0FFFF0FFFh
- dd 00000FFFFh,0F000FFFFh,00F00FFFFh,0FF00FFFFh
- dd 000F0FFFFh,0F0F0FFFFh,00FF0FFFFh,0FFF0FFFFh
- dd 0000FFFFFh,0F00FFFFFh,00F0FFFFFh,0FF0FFFFFh
- dd 000FFFFFFh,0F0FFFFFFh,00FFFFFFFh,0FFFFFFFFh
- bitptn ends
-
- VRAM segment 'CODE'
- assume cs:VRAM
- ;**************************************
- ; Write Kanji Code (JIS or SJIS)
- ;**************************************
- public wrtkan
- wrtkan proc near
- push ebp
- mov ebp,esp
- push esi
- push edi
- push ebx
- push ds
- push fs
-
- mov edi,[ebp].v_y
- shl edi,13 ; 128 * 4 * 16 * v_y = 8192 * v_x
- mov eax,[ebp].v_x
- shl eax,2 ; v_x * 4
- add edi,eax
- and edi,03FFFFh
- add edi,[ebp].v_off
-
- mov eax,[ebp].v_ccol
- and eax,0fh
- mov eax,ds:[eax*4+offset colptn]
- mov [ebp].v_ccol,eax
- mov eax,[ebp].v_bcol
- and eax,0fh
- mov eax,ds:[eax*4+offset colptn]
- mov [ebp].v_bcol,eax
-
- mov ebx,[ebp].v_ch
- bt ebx,15
- jnc sjto4
-
- shl bh,1 ; Shift Jis to Jis
- cmp bl,080h
- adc bx,1f61h
- add bl,7fh
- jc knf1
- add bl,0a2h
- knf1: and bh,7fh ; StoJ end
-
- sjto4: push es
- mov ax,0110h
- mov fs,ax
- mov ax,0100h
- mov dx,1010h
- call pword ptr fs:[00a0h]
- pop es
-
- mov eax,104h
- mov fs,ax
-
- mov ecx,16
- wrtkn1: movzx eax,byte ptr ds:[esi]
- inc esi
- mov eax,es:[eax*4+offset fntptn]
- mov ebx,eax
- not ebx
- and eax,[ebp].v_ccol
- and ebx,[ebp].v_bcol
- or eax,ebx
- mov fs:[edi],eax
-
- movzx eax,byte ptr ds:[esi]
- inc esi
- mov eax,es:[eax*4+offset fntptn]
- mov ebx,eax
- not ebx
- and eax,[ebp].v_ccol
- and ebx,[ebp].v_bcol
- or eax,ebx
- mov fs:[edi+4],eax
-
- add edi,512
- and edi,03FFFFh
- add edi,[ebp].v_off
- loop wrtkn1
-
- pop fs
- pop ds
- pop ebx
- pop edi
- pop esi
- pop ebp
- ret
- wrtkan endp
- ;***********************************
- ; Write ANK code
- ;***********************************
- public wrtank
- wrtank proc near
- push ebp
- mov ebp,esp
- push esi
- push edi
- push ebx
- push es
- push fs
-
- mov edi,[ebp].v_y
- shl edi,13
- mov eax,[ebp].v_x
- shl eax,2
- add edi,eax
- and edi,03FFFFh
- add edi,[ebp].v_off
-
- mov eax,[ebp].v_ccol
- and eax,0fh
- mov eax,ds:[eax*4+offset colptn]
- mov [ebp].v_ccol,eax
- mov eax,[ebp].v_bcol
- and eax,0fh
- mov eax,ds:[eax*4+offset colptn]
- mov [ebp].v_bcol,eax
-
- mov ax,138h
- mov es,ax
- mov ax,104h
- mov fs,ax
-
- mov esi,[ebp].v_ch
- and esi,0ffh
- shl esi,4
- add esi,3D800h
-
- mov ecx,16
- wrtak2: movzx eax,byte ptr es:[esi]
- inc esi
- mov eax,ds:[eax*4+offset fntptn]
- mov ebx,eax
- not ebx
- and eax,[ebp].v_ccol
- and ebx,[ebp].v_bcol
- or eax,ebx
- mov fs:[edi],eax
- add edi,512
- and edi,03FFFFh
- add edi,[ebp].v_off
- loop wrtak2
-
- pop fs
- pop es
- pop ebx
- pop edi
- pop esi
- pop ebp
- ret
- wrtank endp
- ;***********************************
- ;* VRAM Scrool
- ;***********************************
- public vramroll
- vramroll proc near
- push esi
- push edi
- push ds
- push es
-
- mov eax,104h
- mov es,ax
- mov ds,ax
-
- mov esi,512*16
- mov edi,0
- cld
- mov ax,16*24
- vramlp: mov ecx,512/4
- rep movsd
- dec ax
- jnz vramlp
-
- mov ecx,512*16/4
- mov eax,0
- rep stosd
-
- pop es
- pop ds
- pop edi
- pop esi
- ret
- vramroll endp
- ;********************************
- ;* VRAM Clraer
- ;********************************
- public vramcls
- vramcls proc near
- push ebp
- mov ebp,esp
- push edx
- push esi
- push edi
- push ds
- push es
-
- mov edi,[ebp+8]
- shl edi,13
- and edi,03ffffh
- add edi,[ebp+16]
-
- cld
- mov eax,[ebp+12]
- and eax,0fh
- mov eax,ds:[eax*4+offset colptn]
-
- mov dx,104h
- mov es,dx
- mov ds,dx
-
- mov dx,16
- vramcl: mov ecx,512/4
- rep stosd
- and edi,03ffffh
- add edi,[ebp+16]
- dec dx
- jnz vramcl
-
- pop es
- pop ds
- pop edi
- pop esi
- pop edx
- pop ebp
- ret
- vramcls endp
- ;***********************************
- ; Displry CurSol
- ;***********************************
- public disp_cur
- disp_cur proc near
- push ebp
- mov ebp,esp
- push edi
- push ds
-
- mov edi,[ebp+12]
- shl edi,13
- mov eax,[ebp+8]
- shl eax,2
- add edi,eax
- and edi,03FFFFh
- add edi,[ebp+16]
-
- mov eax,104h
- mov ds,ax
-
- mov ecx,16
- disp_1: not dword ptr ds:[edi]
- add edi,512
- and edi,03FFFFh
- add edi,[ebp+16]
- loop disp_1
-
- pop ds
- pop edi
- pop ebp
- ret
- disp_cur endp
- ;***********************************
- ; Displry CurSol
- ;***********************************
- public colset
- colset proc near
- push ebp
- mov ebp,esp
- push edi
-
- cld
- mov edi,[ebp+8]
- mov eax,[ebp+12]
- mov ecx,[ebp+16]
- shr ecx,1
- rep stosw
-
- pop edi
- pop ebp
- ret
- colset endp
- ;***********************************
- ; Soft Timer
- ;***********************************
- public Soft_Timer
- Soft_Timer proc near
- mov cx,[esp+4]
- int 0FDh
- ret
- Soft_Timer endp
- ;***********************************
- ; Printer BIOS
- ;***********************************
- public PRB_chr
- PRB_chr proc near
- mov ax,0100h
- mov dl,[esp+4]
- int 94h
- mov al,ah
- and eax,0FFh
- ret
- PRB_chr endp
-
- ;**********************************************
- ; 漢字コ-ドチェックテ-ブル
- ;**********************************************
- ISKAN1 equ 1
- ISKAN2 equ 2
- ; 0 1 2 3 4 5 6 7 8 9 A B C D E F
- kantbl db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;0
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;1
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;2
- db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;3
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;4
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;5
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;6
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0 ;7
- db 2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ;8
- db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ;9
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;A
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;B
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;C
- db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ;D
- db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ;E
- db 3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0 ;F
-
- ;**************************************************
- ;void wrtstr(char *str, int x, int y, int cl)
- ; +8 +12 +16 +20
- ;**************************************************
- public wrtstr
- wrtstr proc near
- push ebp
- mov ebp,esp
- sub esp,8
- push ebx
- push esi
- push edi
-
- mov eax,[ebp+20]
- test al,16
- je BakCol
- and eax,15
- mov [ebp-8],eax ; bc
- mov dword ptr [ebp-4],0 ; fc
- jmp WrtSt1
-
- BakCol: and eax,0Fh
- mov [ebp-4],eax ; fc
- mov dword ptr [ebp-8],0 ; bc
-
- WrtSt1: mov eax,[ebp+12] ; x
- lea edi,[eax+eax]
- mov eax,[ebp+16] ; y
- lea eax,[eax+eax*4]
- shl eax,5
- add edi,eax
- add edi,[dmy_vram]
-
- mov esi,[ebp+8] ; *str
- WrtStLp:
- movzx eax,byte ptr [esi]
- inc esi
- and al,al
- jnz WrtSt2
-
- pop edi
- pop esi
- pop ebx
- leave
- ret
-
- WrtSt2:
- mov bl,[eax+offset kantbl]
- and bl,ISKAN1
- jz NonKan
- movzx ebx,byte ptr [esi]
- mov bh,[ebx+offset kantbl]
- and bh,ISKAN2
- jz NonKan
- mov bh,al
- inc si
-
- push 0
- push dword ptr [ebp-8]
- push dword ptr [ebp-4]
- push dword ptr [ebp+16]
- push dword ptr [ebp+12]
- push ebx
- call wrtkan
- add esp,6*4
-
- mov al,[ebp+20]
- or al,40h
- mov ah,bh
- mov [edi],ax
- add edi,2
-
- mov al,[ebp+20]
- or al,80h
- mov ah,bl
- mov [edi],ax
- add edi,2
-
- add dword ptr [ebp+12],2
- jmp WrtStNt
-
- NonKan:
- cmp al,1Bh
- je WrtStNt
-
- mov ebx,eax
- push 0
- push dword ptr [ebp-8]
- push dword ptr [ebp-4]
- push dword ptr [ebp+16]
- push dword ptr [ebp+12]
- push ebx
- call wrtank
- add esp,6*4
-
- mov al,[ebp+20]
- mov ah,bl
- mov [edi],ax
- add edi,2
- inc dword ptr [ebp+12]
-
- WrtStNt:
- cmp dword ptr [ebp+12],80
- jl WrtStLp
- inc dword ptr [ebp+16]
- mov dword ptr [ebp+12],0
- jmp WrtStLp
-
- wrtstr endp
-
- ;******************************************
- ;void Dsp_vram(char *vp)
- ; +8
- ;******************************************
- public Dsp_vram
- Dsp_vram proc near
- push ebp
- mov ebp,esp
- sub esp,16
- push ebx
- push esi
- push edi
-
- mov edi,[dmy_vram]
- add edi,320
- mov esi,[ebp+8]
-
- mov dword ptr [ebp-4],0 ; y = 0
- DspYLop:
- mov ecx,0
- DspXLop:
- mov ax,[esi] ; *vp
- cmp ax,[edi] ; *mp
- je DspXNxt
-
- cmp ecx,0
- je DspNxt1
- test al,80h
- jz DspNxt1
- mov bx,[esi-2]
- test bl,40h
- jz DspNxt1
-
- dec ecx
- sub esi,2
- sub edi,2
-
- DspNxt1:
- movzx eax,byte ptr [esi]
- test al,10h
- je DspNxt2
- and al,0Fh
- mov [ebp-16],eax
- mov dword ptr [ebp-12],0
- jmp DspNxt3
-
- DspNxt2:
- and al,0Fh
- mov [ebp-12],eax
- mov dword ptr [ebp-16],0
-
- DspNxt3:
- mov eax,[esi]
- and eax,00800040h
- cmp eax,00800040h
- jne DspNxt4
-
- push ecx
- push 0
- push dword ptr [ebp-16]
- push dword ptr [ebp-12]
- mov eax,[ebp-4]
- add eax,2
- push eax
- push ecx
- movzx eax,byte ptr [esi+3]
- mov ah,byte ptr [esi+1]
- push eax
- call wrtkan
- add esp,6*4
- pop ecx
-
- mov eax,[esi]
- mov [edi],eax
- jmp DspXNxt
-
- DspNxt4:
- push ecx
- push 0
- push dword ptr [ebp-16]
- push dword ptr [ebp-12]
- mov eax,[ebp-4]
- add eax,2
- push eax
- push ecx
- mov al,[esi]
- and al,0C0h
- jz DspNxt5
- mov eax,0FEh
- jmp DspNxt6
- DspNxt5:
- movzx eax,byte ptr [esi+1]
- DspNxt6:
- push eax
- call wrtank
- add esp,6*4
- pop ecx
-
- mov ax,[esi]
- mov [edi],ax
-
- DspXNxt:
- add esi,2
- add edi,2
- inc ecx
- cmp ecx,80
- jne DspXLop
-
- inc dword ptr [ebp-4]
- mov eax,[ebp-4]
- cmp eax,MAX_SCR
- jne DspYLop
-
- mov word ptr ReWrt_flg,-1
- call locate
-
- pop edi
- pop esi
- pop ebx
- leave
- ret
-
- Dsp_vram endp
-
- VRAM ends
- end